package saee.bean;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

import saee.dao.CursoDAO;
import saee.modelo.Curso;

@ManagedBean
@ViewScoped
public class CursoBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Curso curso = new Curso();
	private List<Curso> cursos;

	public void limparCurso() {
		this.curso = new Curso();
		this.cursos = null;
	}

	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}

	@SuppressWarnings("unchecked")
	public List<Curso> getCursos() {
		if (cursos == null) {
			CursoDAO dao = new CursoDAO();
			this.cursos = dao.listarTodos(Curso.class);
		}

		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public void gravarCurso(ActionEvent actionEvent) {
		CursoDAO cursoDAO = new CursoDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			cursoDAO.cadastrar(curso);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Gravado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao gravar", null);
		}
		limparCurso();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void alterarCurso(ActionEvent actionEvent) {
		CursoDAO cursoDAO = new CursoDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			cursoDAO.atualizar(curso);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Alterado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao alterar", null);
		}
		limparCurso();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void removerCurso() {
		CursoDAO cursoDAO = new CursoDAO();
		FacesMessage msg = null;

		try {
			cursoDAO.excluir(Curso.class, curso.getId());

			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Excluido com sucesso", null);
		} catch (Exception e) {
			e.printStackTrace();
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao excluir", null);
		}
		limparCurso();
		FacesContext.getCurrentInstance().addMessage(null, msg);

	}

}
